package logicaPresentacion;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import logicaNegocio.Asignatura;
import logicaNegocio.GestionAdministrador;


public class FormularioAsignatura extends JInternalFrame implements ActionListener
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 4566498807430129781L;
	private GestionAdministrador gAd;
	private JButton  btnCancelar,btnGuardar;
    private String eleccion;
    private JComboBox<String> jcbAsignaturas;     
	private JTextField  jtfNombre,jtfCreditos,jtfExplicacion;
	private JLabel jlbCreditos,jlbExplicacion,jlbNombre;     
	private Box boxVCamposVentana;  
	private JPanel panBotones;      
	private ClaseAObservar observable;
    private boolean excepcion = false;
	
    public FormularioAsignatura (GestionAdministrador gAd,String eleccion, ClaseAObservar observable)
    { 	
        super("Introduzca los datos de la asignatura");
        this.gAd = gAd;
        this.eleccion = eleccion;
        this.observable = observable;
        setSize(400,400);
        Box boxVContenidoVerticalVentana = Box.createVerticalBox();

        Box boxHNombre =  Box.createHorizontalBox();
        jlbNombre = new JLabel("Nombre de la asgnatura");   jtfNombre = new JTextField(15);
        boxHNombre.add(Box.createHorizontalStrut(10));
        boxHNombre.add(jlbNombre);
        boxHNombre.add(Box.createHorizontalStrut(20));
        boxHNombre.add(jtfNombre);
        JPanel panNombre =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panNombre.add(boxHNombre);

        Box boxHCreditos =  Box.createHorizontalBox();	        
        jlbCreditos = new JLabel("Numero de Creditos (>6) ");   jtfCreditos = new JTextField(10);
        boxHCreditos.add(Box.createHorizontalStrut(10));
        boxHCreditos.add(jlbCreditos);
        boxHCreditos.add(Box.createHorizontalStrut(11));
        boxHCreditos.add(jtfCreditos);
        JPanel panCreditos =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panCreditos.add(boxHCreditos);

        Box boxHExplicacion =  Box.createHorizontalBox();
        jlbExplicacion = new JLabel("Breve explicacion ");   jtfExplicacion = new JTextField(15);
        boxHExplicacion.add(Box.createHorizontalStrut(10));
        boxHExplicacion.add(jlbExplicacion);
        boxHExplicacion.add(Box.createHorizontalStrut(11));
        boxHExplicacion.add(jtfExplicacion);
        JPanel panExplicacion =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panExplicacion.add(boxHExplicacion);
        
        	        
        boxVCamposVentana = Box.createVerticalBox();
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panNombre);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panCreditos);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panExplicacion);

       // crearBotones();
        //Espacio del borde superior de la ventana al primer Campo
        Box boxHBotones = Box.createHorizontalBox();

        btnGuardar = new JButton("Guardar");
        btnCancelar = new JButton("Cancelar");
        btnGuardar.addActionListener(this);
        btnCancelar.addActionListener(this);
        
        boxHBotones.add(btnGuardar);
        boxHBotones.add(Box.createHorizontalStrut(20));
        boxHBotones.add(btnCancelar);
        boxHBotones.add(Box.createHorizontalStrut(40));

        if (eleccion == "Actualizar")
        {
        	ArrayList<Asignatura> asignaturas = gAd.getAsignaturas();
        	Box boxHAsignaturas=  Box.createHorizontalBox();
            JLabel jlbAlumnos;
            
            jlbAlumnos = new JLabel("Elige la Asignatura ");   jcbAsignaturas = new JComboBox<String>();
            jcbAsignaturas.addActionListener(this);
    	
    		for(int i = 0; i<asignaturas.size();i++)
    		{ 
	    	    Asignatura a = (Asignatura) asignaturas.get (i);
	            String nombre = a.getNombreAsignatura();
	            jcbAsignaturas.addItem(nombre);	            
    		}
    		
    		boxHAsignaturas.add(Box.createHorizontalStrut(10));
    		boxHAsignaturas.add(jlbAlumnos);
    		boxHAsignaturas.add(Box.createHorizontalStrut(40));
    		boxHAsignaturas.add(jcbAsignaturas);
            JPanel panAsignaturas =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
            panAsignaturas.add(boxHAsignaturas);
            
            boxVCamposVentana.add(Box.createVerticalStrut(10));
            boxVCamposVentana.add(panAsignaturas);
        }
        
        panBotones =  new JPanel(new FlowLayout(FlowLayout.RIGHT) );
        panBotones.add(boxHBotones);
        boxVContenidoVerticalVentana.add(Box.createVerticalStrut(30));
        boxVContenidoVerticalVentana.add(boxVCamposVentana);
        //Espacio entre el ultimo campo (sexo) y los botones Guardar y Cancelar
        boxVContenidoVerticalVentana.add(Box.createVerticalStrut(20));
        boxVContenidoVerticalVentana.add(panBotones);

        add(boxVContenidoVerticalVentana);
       // this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        setVisible(true); 
    }
    public void actionPerformed(ActionEvent e)
    {
    	if (e.getSource() instanceof JButton) 
		{
			JButton btnPulsado=(JButton)e.getSource();
	        
			if (btnPulsado==btnGuardar) 
			{ 
				if (("".equals(jtfNombre.getText()))||("".equals(jtfCreditos.getText()))||("".equals(jtfExplicacion.getText())))
	            {
					JOptionPane.showMessageDialog(this,"Rellene todos los campos del formulario","Advertencia",JOptionPane.WARNING_MESSAGE);
	            }
				else
				{
					try
	                {
						int creditos =Integer.parseInt(jtfCreditos.getText());
	                	tamanoCreditos(jtfCreditos.getText());
	                }
	                catch(ExcepcionTamano ecre)
	                {
	                	JOptionPane.showMessageDialog(this,"Error de formato de los Creditos, deben ser minimo 6","Error",JOptionPane.ERROR_MESSAGE);
	                	excepcion=true;
	                }
					catch(NumberFormatException nfe)
                    {
                    	JOptionPane.showMessageDialog(this,"Error de formato en los creditos, debe ser un numero","Error",JOptionPane.ERROR_MESSAGE);
                    	excepcion=true;
                    }
					if(excepcion ==false)
                    {
						if (eleccion == "Anadir")
						{
			            	 gAd.anadirAsignatura(jtfNombre.getText(), jtfCreditos.getText(), jtfExplicacion.getText());
			            	 observable.setTabla();
			            	 dispose();
						}
		            	if (eleccion == "Actualizar")
	            		{
		            		 gAd.actualizarAsignatura(jtfNombre.getText(), jtfCreditos.getText(), jtfExplicacion.getText(),jcbAsignaturas.getSelectedIndex());	
		            		 observable.setTabla();
		            		 dispose();
						}
                    }
                    else
                    {
                    	excepcion = false;
                    } 
				}
			}
			else if (btnPulsado==btnCancelar) 
			{
				dispose();
			}
    	}
	}	
    public void tamanoCreditos(String creditos)throws ExcepcionTamano
    {
    	int num = Integer.parseInt(creditos);
    	if(num<6)
    	{
    		throw new ExcepcionTamano();
    	}
    }			
			
}
